/*
* Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved.
*/
#ifndef BASE_DVPP_CMDLIST_LOG_H
#define BASE_DVPP_CMDLIST_LOG_H

#ifdef __KERNEL__
#include <linux/printk.h>
#else
#include "slog.h"
#endif

// 个人修改统计，版本号统计
#define VERSION_WCG (0)
#define VERSION_LJC (0)
#define VERSION_LXC (0)
#define VERSION_LYT (1)
#define VERSION_SL  (0)
#define VERSION_WJ  (0)
#define VERSION_XH  (0)
#define VERSION_WYW (0)
#define VERSION ( \
    VERSION_WCG + VERSION_LJC + VERSION_LXC + VERSION_LYT + VERSION_SL + VERSION_WJ + VERSION_XH + VERSION_WYW)

#ifdef __KERNEL__

#define DVPP_LOG_INFO(module, format, ...) \
do { \
    (void)printk(KERN_INFO "[DVPP_CMDLIST][%s] [%s:%d] "  "[T%d] " format "", \
        module, __FUNCTION__, __LINE__, VERSION, ##__VA_ARGS__); \
} while (0)

#define DVPP_LOG_DEBUG(module, format, ...) \
do { \
    (void)printk(KERN_DEBUG "[DVPP_CMDLIST][%s] [%s:%d] "   "[T%d] " format "", \
        module, __FUNCTION__, __LINE__, VERSION, ##__VA_ARGS__); \
} while (0)

#define DVPP_LOG_WARN(module, format, ...) \
do { \
    (void)printk(KERN_WARNING "[DVPP_CMDLIST][%s] [%s:%d] "   "[T%d] " format "", \
        module, __FUNCTION__, __LINE__, VERSION, ##__VA_ARGS__); \
} while (0)

#define DVPP_LOG_ERROR(module, format, ...) \
do { \
    (void)printk(KERN_ERR "[DVPP_CMDLIST][%s] [%s:%d] "   "[T%d] " format "", \
        module, __FUNCTION__, __LINE__, VERSION, ##__VA_ARGS__); \
} while (0)

// 动态日志输出功能可以通过配置/sys/kernel/debug/dynamic_debug/control进行启用
#define DVPP_DYNAMIC_DEBUG(module, format, ...) \
do { \
    pr_debug("[DVPP_CMDLIST][%s] [%s:%d] "   "[T%d] " format "", \
        module, __func__, __LINE__, VERSION, ##__VA_ARGS__); \
} while (0)

#else // #ifdef __KERNEL__

#define DVPP_LOG_INFO(module, format, ...) \
do { \
    DlogForC(DVPP, DLOG_INFO, "[DVPP_CMDLIST][%s] [%s:%d] "  "[T%d] " format "", \
        module, __FUNCTION__, __LINE__, VERSION, ##__VA_ARGS__); \
} while (0)

#define DVPP_LOG_DEBUG(module, format, ...) \
do { \
    DlogForC(DVPP, DLOG_DEBUG, "[DVPP_CMDLIST][%s] [%s:%d] "   "[T%d] " format "", \
        module, __FUNCTION__, __LINE__, VERSION, ##__VA_ARGS__); \
} while (0)

#define DVPP_LOG_WARN(module, format, ...) \
do { \
    DlogForC(DVPP, DLOG_WARN, "[DVPP_CMDLIST][%s] [%s:%d] "   "[T%d] " format "", \
        module, __FUNCTION__, __LINE__, VERSION, ##__VA_ARGS__); \
} while (0)

#define DVPP_LOG_ERROR(module, format, ...) \
do { \
    DlogForC(DVPP, DLOG_ERROR, "[DVPP_CMDLIST][%s] [%s:%d] "   "[T%d] " format "", \
        module, __FUNCTION__, __LINE__, VERSION, ##__VA_ARGS__); \
} while (0)

#define DVPP_DYNAMIC_DEBUG(module, format, ...) \
do { \
    DlogForC(DVPP, DLOG_DEBUG, "[DVPP_CMDLIST][%s] [%s:%d] "   "[T%d] " format "", \
        module, __FUNCTION__, __LINE__, VERSION, ##__VA_ARGS__); \
} while (0)

#endif // #ifdef __USER__

#define DVPP_CMDLIST_JPEGD_LOG_INFO(format, argv...)   DVPP_LOG_INFO("JPEGD", format, ##argv)
#define DVPP_CMDLIST_JPEGD_LOG_DEBUG(format, argv...)  DVPP_DYNAMIC_DEBUG("JPEGD", format, ##argv)
#define DVPP_CMDLIST_JPEGD_LOG_WARN(format, argv...)   DVPP_LOG_WARN("JPEGD", format, ##argv)
#define DVPP_CMDLIST_JPEGD_LOG_ERROR(format, argv...)  DVPP_LOG_ERROR("JPEGD", format, ##argv)

#define DVPP_CMDLIST_JPEGE_LOG_INFO(format, argv...)   DVPP_LOG_INFO("JPEGE", format, ##argv)
#define DVPP_CMDLIST_JPEGE_LOG_DEBUG(format, argv...)  DVPP_DYNAMIC_DEBUG("JPEGE", format, ##argv)
#define DVPP_CMDLIST_JPEGE_LOG_WARN(format, argv...)   DVPP_LOG_WARN("JPEGE", format, ##argv)
#define DVPP_CMDLIST_JPEGE_LOG_ERROR(format, argv...)  DVPP_LOG_ERROR("JPEGE", format, ##argv)

#define DVPP_CMDLIST_VPC_LOG_INFO(format, argv...)   DVPP_LOG_INFO("VPC", format, ##argv)
#define DVPP_CMDLIST_VPC_LOG_DEBUG(format, argv...)  DVPP_DYNAMIC_DEBUG("VPC", format, ##argv)
#define DVPP_CMDLIST_VPC_LOG_WARN(format, argv...)   DVPP_LOG_WARN("VPC", format, ##argv)
#define DVPP_CMDLIST_VPC_LOG_ERROR(format, argv...)  DVPP_LOG_ERROR("VPC", format, ##argv)

#define DVPP_CMDLIST_LOG_INFO(format, argv...)   DVPP_LOG_INFO("DVPP", format, ##argv)
#define DVPP_CMDLIST_LOG_DEBUG(format, argv...)  DVPP_DYNAMIC_DEBUG("DVPP", format, ##argv)
#define DVPP_CMDLIST_LOG_WARN(format, argv...)   DVPP_LOG_WARN("DVPP", format, ##argv)
#define DVPP_CMDLIST_LOG_ERROR(format, argv...)  DVPP_LOG_ERROR("DVPP", format, ##argv)

#endif // #ifndef BASE_DVPP_CMDLIST_LOG_H
